﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;

namespace GestionaleLib.Controller
{
   public class ctrlTipoDocumenti
    {
        #region "Testata"
        #region "Proprietà"
        private Connector Connessione;
        #endregion
        public enum Insert
        {
            Successo,
            Errore
        }
        public enum Edit
        {
            Successo,
            Errore
        }
        public enum Delete
        {
            Successo,
            Errore
        }
        #endregion

        public ctrlTipoDocumenti()
        {
            Connessione = Connector.Istance();
        }

       //Nuovo Tipo Documenti
        public Insert Nuovo(TipoDocumento TipoDocumento)
        {
            try
            {
                string sql = @"INSERT INTO DocumentiTipo(Id,Descrizione,Vendita)
                              VALUES(@Id,@Descrizione,@Vendita)";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", TipoDocumento.Id);
                cmd.Parameters.AddWithValue("@Descrizione", TipoDocumento.Descrizione);
                cmd.Parameters.AddWithValue("@Vendita", TipoDocumento.Vendita);
                cmd.ExecuteNonQuery();

                return Insert.Successo;
            }
            catch 
            {
                
                throw new ExceptionErroreInserimento();
            }
        }

       //Modifica Tipo Documenti
        public Edit Modifica(TipoDocumento TipoDocumento)
        {
            try
            {
                string sql = @"UPDATE DocumentiTipo SET
                                Descrizione=@Descrizione
                                Vendita=@Vendita
                                WHERE Id=@Id";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Descrizione", TipoDocumento.Descrizione);
                cmd.Parameters.AddWithValue("@Vendita", TipoDocumento.Vendita);
                cmd.Parameters.AddWithValue("@Id", TipoDocumento.Id);
                cmd.ExecuteNonQuery();
                return Edit.Successo;
            }
            catch 
            {
                
                throw new ExceptionErroreModifica();
            }
        }

       //Cancella Tipo Documenti
        public Delete Cancella(TipoDocumento TipoDocumento)
        {
            try
            {
                string sql = @"DELETE FROM DocumentiTipo
                                WHERE Id=@Id";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", TipoDocumento.Id);
                cmd.ExecuteNonQuery();

                return Delete.Successo;
            }
            catch 
            {

                throw new ExceptionErroreCancellazione();
            }
        }

       //Effettua una select su tutti i tipi di documento
        public List<TipoDocumento> Seleziona()
        {
            string sql = @"SELECT * FROM DocumentiTipo ORDER BY Descrizione ASC
                ";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<TipoDocumento> ListaRitorno = new List<TipoDocumento>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    TipoDocumento TipoDocumentoRitorno = new TipoDocumento();
                    TipoDocumentoRitorno.Id = (Guid)item["Id"];
                    TipoDocumentoRitorno.Descrizione = item["Descrizione"].ToString();
                    TipoDocumentoRitorno.Vendita = (bool)item["Vendita"];
                    ListaRitorno.Add(TipoDocumentoRitorno);
                }
                return ListaRitorno;
            }
            return null;
        }

       //Effettua una select effettuando il like su una parola inserita
        public List<TipoDocumento> Seleziona(string Valore)
        {
            string sql = @"
                SELECT * FROM DocumentiTipo 
                    WHERE Descrizione LIKE '%" + Valore.Replace("'", "''") + "%'";

            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<TipoDocumento> ListaRitorno = new List<TipoDocumento>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    TipoDocumento TipoDocumentoRitorno = new TipoDocumento();
                    TipoDocumentoRitorno.Id = (Guid)item["Id"];
                    TipoDocumentoRitorno.Descrizione = item["Descrizione"].ToString();
                    TipoDocumentoRitorno.Vendita = (bool)item["Vendita"];
                    ListaRitorno.Add(TipoDocumentoRitorno);
                }
                return ListaRitorno;
            }
            return null;
        }
    }
}
